package com.ray.mapper;

import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.ray.bean.MaterialTreeBean;
import com.ray.bean.OrderBean;
import com.ray.bean.OrderInfoDetailBean;
import com.ray.bean.PutOutOrderBean;
import com.ray.bean.PutOutUpdateUnitPriceBean;
import com.ray.bean.PutOutWarehouseBean;
import com.ray.bean.PutoutFowCycleBean;
import com.ray.bean.PutoutSupplierBean;
import com.ray.exception.ServiceException;

public interface PutOutMapperNew {
	/**
	 * 插入外协仓库记录
	 * @param putOutList(外协仓库集合)
	 * @return 
	 */
	int insertAllPutOutWarehouse(@Param("putOutList")List<PutOutWarehouseBean> putOutList);

	/**
     * 修改交接到外协仓库的数量
     * @param putOutWarehouse(外协仓库bean)
     * @param id(id)
     * @param status(状态 0 )
     * @param count(合格数)
     * @param noCount(不合格数)
     * @param updateUser(修改人)
     */
	void updatePutoutCount(@Param("putOutWarehouse")PutOutWarehouseBean putOutWarehouse);

	/**
	 * 通过id获取外协仓库记录
	 * @param id
	 * @return
	 */
	List<PutOutWarehouseBean> getPutOutWarehouseByTypeId(@Param("typeId")String typeId,@Param("isApprpval")Integer isApprpval);

	/**
	 * 审核外协交接记录
	 * @param id(id)
	 * @param status(状态)
	 * @param loginUserId(审核人)
	 * @param map
	 */
	int  approvalPutOutWarehouseByTypeId( Map map);

	/**
	 * 删除外协交接集合
	 * @param otherIdList(外协交接集合)
	 * @return 
	 */
	int deletePutOutWarehouseByTypeIdList(@Param("typeIdList")List<String> typeIdList);
	
	/**
	 * 获取有交接到外协的订单信息
	 * @param map
	 * @param loginCompany(登录人的公司)
	 * @return
	 */
	List<OrderBean> getPutOutWarehouseOrderList(Map map);

    /**
     * 获取交接到外协的订单的物料
     * @param orderId(订单编号)
     * @param map
     * @return
     */
	List<String> getPutOutOrderMaterialTypeList(Map map);

	/**
    * 获取交接到外协的订单的物料详情
    * @param orderId(订单编号  非必填)
    * @param materialType(物料类型  非必填)
    * @param status(状态 非必填)
    * @param start(开始 非必填)
    * @param length(条数 非必填)
    * @param map
    * @return
    */
	int getPutWarehouseDetailCount(Map map);
	List<PutOutWarehouseBean> getPutWarehouseDetail(Map map);

	/**
	 * 查询外协仓库库存
	 * @param orderId(订单编号)
	 * @param rowIndex(行号)
	 * @param materialType(物料类型)
	 * @param putOut
	 * @return
	 */
	long getPutOutWarehouseStockCount(@Param("putOut")PutOutWarehouseBean putOut);

	/**
	 *  查询外协可外发库存
	 * @param putOut
	 * @return
	 */
	int getOrderSurePutOutCount(@Param("putOut")PutOutWarehouseBean putOut);

	/**
	 * 插入外协单
	 * @param putOutOrderList(外协单集合)
	 */
	void insertAllPutOutOrder(@Param("putOutOrderList")List<PutOutOrderBean> putOutOrderList);

	/**
	 * 获取外协周期
	 * @param start(分页参数)
	 * @param length(分页参数)
	 * @param status(状态)
	 * @throws ServiceException
	 * @author NateLu
	 * @throws ParseException 
	 */
	int getPutoutFlowCycleCount(Map map);
	List<PutoutFowCycleBean> getPutoutFlowCycleData(Map map);

	/**
	 * 获取外发供应商
	 * @param start(分页参数)
	 * @param length(分页参数)
     * @param status(状态)
   	 * @author NateLu
	 */
	int getPutoutSupplierCount(Map map);
	List<PutoutSupplierBean> getPutoutSupplierData(Map map);

	/**
	 * 获取订单明细
	 * @param orderId(订单编号)
	 * @return
	 */
	List<OrderInfoDetailBean> getOrderInfoDetail(Map map);

	/**
	 * 获取外协单数据
	 * @param start(分页参数)
	 * @param length(分页参数)
	 * @param type(类型 1   根据制单时间筛选   2 根据返回时间筛选  默认1)
	 * @param startTime(开始时间)
	 * @param endTime(结束时间)
	 * @param orderId(订单编号，选填)
	 * @param supplierId(外发供应商id，选填)
	 * @param technology(外发工艺，选填)
	 * @param maching(加工对象，选填)
	 * @param mantissa(尾数，选填)
	 * @param delay(拖期，选填)
	 * @throws ParseException 
	 * @throws ServiceException
	 */
	List<PutOutOrderBean> getPutoutOrderData(Map map);
	int getPutoutOrderCount(Map map);

	/**
	 * 审核外协单
	 * @author nate
	 * @param id(外协单号id)
	 * @param status 1 审核通过  2 退回（审核不通过）
	 * @throws ServiceException
	 */
	void approvalPutOutOrder(Map map);

	/**
	 * 通过id删除外协单记录
	 * @param idString
	 */
	int  deletePutOutOrderByTypeId(@Param("typeId")String idString);
//	int  deletePutOutOrderByOtherId(Map map);

	/**
	 * 获取外协单返回
	 * @param start(分页参数)
	 * @param length(分页参数)
	 * @param startTime(开始时间)
	 * @param endTime(结束时间)
	 * @param orderId(订单编号，选填)
	 * @param supplierId(外发供应商id，选填)
	 * @param technology(外发工艺，选填)
	 * @param maching(加工对象，选填)
	 */
	int getPutoutOrderReturnCount(Map map);
	List<PutOutOrderBean> getPutoutOrderReturnData(Map map);
	
	/**
	 * 通过外协单id获取返回的数量
	 * @param putOutId
	 * @return
	 */
	PutOutOrderBean getReturnCountByPutOutId(@Param("putOutId")String putOutId);
	/**
	 * 外协单还可返回数
	 * @param putOutId(外协id)
	 * @return
	 */
	PutOutOrderBean getBackCountByPutOutId(@Param("putOutId")String putOutId);
	
	/**
	 * 批量返回外协单
	 * @param map
	 */
	int  returnPutOutOrderAll(@Param("putOutOrderList")List<PutOutOrderBean> putOutOrderList);
	
	/**
	 * 修改外协单返回数量
	 * @param putOutOrderBean
	 */
	void updatePutOutOrder(@Param("putOut")PutOutOrderBean putOutOrderBean);
	
	/**
	 * 审核外协单返回
	 * @param map
	 */
	void approvalPutOutOrderReturn(Map map);
	
	/**
	 * 删除外协返回单
	 * @param id(id)
	 * @return 
	 * @throws ServiceException
	 * @throws ParseException 
	 */
	int deletePutOutOrderReturn(Map map);

	/**
	 * 获取外协库存
	 * @param map
	 * @return
	 */
	List<PutOutWarehouseBean> getPutOutWarehouseCountOrder(Map map);
	int getPutOutWarehouseCountOrderCount(Map map);
	
	/**
	 * 校验供应商下的工艺是否存在
	 * @param supplierId(供应商id)
	 * @param technology(工艺)
	 * @param id(非必传)
	 * @return
	 */
	List<String> checkPutoutFlowCycle(Map map);
	
	/**
	 * 添加外发周期
	 * @param supplierId(供应商Id)
	 * @param technology(加工工艺)
	 * @param flowCycle(整数)
	 * @throws ServiceException
	 * @author NateLu
	 * @return 
	 */
	int addPutoutFlowCycle(Map map);

	/**
	 * 修改外协周期
	 * @param id(必传)
	 * @param technology(加工工艺，传则改)
	 * @param flowCycle(流程周期,传则改)
	 * @param status(状态,传则改)
	 * @throws ServiceException
	 * @author NateLu
	 */
	int updatePutoutFlowCycle(Map map);

	/**
	 * 添加外发供应商
	 * @param supplierName(供应商名称)
	 * @param contactUser(联系人)
	 * @param contactPhone(联系电话)
	 * @author NateLu
	 */
	int addPutoutSupplier(Map map);
	
	/**
	 * 修改外发供应商
	 * @param id(必传)
	 * @param supplierName(必传)
	 * @param status(可不传，传则修改)
	 * @param contactUser((可不传，传则修改)
	 * @param contactPhone(可不传，传则修改)
	 * @throws ServiceException
	 * @author NateLu
	 */
	int updatePutoutSupplier(Map map);

	/**
	 * 获取符合条件的类型id
	 * @param map
	 * @return
	 */
	List<String> getTypeId(Map map);

	/**
	 * 通过其他id审核外协交接记录
	 * @param map
	 */
	int   approvalPutOutWarehouseByOtherId(Map map);

	/**
	 * 获取根据typeId分组的typeId
	 * @param map
	 * @return
	 */
	List<String> getWarehouseGroupTypeId(Map map);

	/**
	 * 获取返回类型id
	 * @param map
	 * @return
	 */
	List<String> getReturnTypeId(Map map);

	/**
	 * 通过外协类型id获取返回类型id
	 * typeId
	 * @param map
	 * @return
	 */
	List<String> getReturnTypeIdByPutOutTypeId(Map map);

	/**
	 * 通过外协信息批量获取外协库存
	 * @param list
	 * @return
	 */
	List<PutOutWarehouseBean> getOrderMaterialTypeStockCountListByPutOutList(@Param("putOutList")List<PutOutOrderBean> list);

	/**
	 * 获取订单交接到外协仓库的类型
	 * orderId 订单编号
	 * @return
	 */
	List<MaterialTreeBean> getOrderInWarehouseType(Map map);

	/**
	 * 修改外协实际价格
	 * typeId (类型id)
	 * actualPrice (实际价格)
	 * @param map
	 * @return
	 */
	int updatePutOutActualPrice(Map map);

	/**
	 * 获取外协总价
	 * @param map
	 * @return
	 */
	Double getPutOutOrderSumPrice(Map map);

	/**
	 * 获取外协返回单价格，用于校验是否可修改单价
	 * @param putOutIdSet
	 * @return
	 */
	List<PutOutOrderBean> checkPutOutPrice(@Param("putOutIdSet")Set<String> putOutIdSet);
    /**
     * 插入外协修改价格记录
     * @param updatePriceList
     * @return
     */
	int  addPutOutUpdatePriceRecord(@Param("updatePriceList")List<PutOutUpdateUnitPriceBean> updatePriceList);

	/**
	 * 获取订单电镀色 
	 * orderId  订单编号 
	 * @param map
	 * @return
	 */
	List<OrderInfoDetailBean> getDianDuColorList(Map map);

	/**
	 * 获取已经外协的物料及附加物料信息
	 * orderId 订单编号
	 * @return
	 */
	List<PutOutWarehouseBean> getAleradyPutOutMaterialList(Map map);

	/**
	 * 将外协单设置完成
	 * @param map
	 * @return
	 */
	int setPutOutOrderIsFinish(Map map);

	/***
	 * 获取外协付款汇总
	 * @param map
	 * @return
	 */
	Map<String, Object> getPutOutSumMoney(Map map);

	/**
	 * 通过关联id获取外协出入库记录
	 * @param otherId
	 * @return
	 */
	List<PutOutWarehouseBean> getPutOutWarehouseByOtherId(@Param("otherId")String otherId);

	/**
	 * 获取外协财务汇总
	 * @param map
	 * @return
	 */
	List<Map> getPutOutSum(Map map);
}
